//选择排序
//回调函数作为判断条件(升序 || 降序)

//回调做判断条件 灵活调整
int cmp(int pa, int pb)
{
    return pa > pb ? 1 : 0;
}

//swap 函数
void swap(int *pa, int *pb)
{
    *pa ^= *pb;
    *pb ^= *pa;
    *pa ^= *pb;
}

//选择排序
void selectSort(int *pa, int n, int(*pf)(int,int))
{
    for(int i=0; i<n-1; i++)
        for(int j=i+1; j<n; j++)
            if(pf(pa[i],pa[j]))
				swap(pa[i],pa[j]);

}


//选择排序升级版   比较但不交换--> 每层只交换一次
void selectSortPro(int *pa, int n)
{
    for(int i=0; i<n-1; i++)
    {
        int maxindex = i;
        for(int j=i+1; j<n; j++)
        {
            if(pa[maxindex] < pa[j])
                maxindex = j;
        }
        if(maxindex != i)
            swap(&pa[maxindex],&pa[i]);
    }
}